جدولة تطبيق Node.js مع MongoDB على Kubernetes باستخدام Helm
في العصر الحالي، أصبحت تقنيات الحاويات (containers) وأدوات إدارة الحاويات مثل Kubernetes ضرورية في عملية نشر وإدارة التطبيقات بطريقة مرنة وفعالة. واحدة من أكثر الاستخدامات شيوعًا لهذه التقنيات هي جدولة وتشغيل التطبيقات الموزعة، مثل تطبيقات Node.js التي تحتاج إلى قاعدة بيانات مثل MongoDB. يعتبر Kubernetes أداة قوية لإدارة هذه التطبيقات على نطاق واسع، ويوفر طريقة مرنة لإدارة التوزيع، والترقية، والتحجيم (scaling) التلقائي، ومراقبة حالة التطبيق.
Helm، من جهة أخرى، هو أداة لإدارة الحزم (package manager) على Kubernetes، ويجعل عملية نشر التطبيقات المعقدة أسهل وأسرع عبر استخدام القوالب المخصصة (templates) التي يمكنها إنشاء موارد Kubernetes اللازمة بسهولة. في هذا المقال، سنتعرف على كيفية جدولة تطبيق Node.js مع MongoDB على Kubernetes باستخدام Helm، بحيث يمكن إدارة وتوزيع هذه التطبيقات بسلاسة.
مقدمة عن Kubernetes و Helm
Kubernetes:
Kubernetes هو نظام مفتوح المصدر يُستخدم لإدارة الحاويات على نطاق واسع. يعمل Kubernetes على توزيع الحاويات عبر مجموعة من الخوادم (nodes) ويقدم العديد من الميزات مثل:
-
التوزيع الآلي (Automated Deployment): إمكانية نشر التطبيقات بسهولة.
-
التحجيم التلقائي (Auto-scaling): تعديل حجم التطبيق بشكل تلقائي بناءً على احتياجات الموارد.
-
الاسترداد التلقائي (Self-healing): إعادة تشغيل الحاويات المعطلة تلقائيًا.
-
التحكم في الشبكة (Network Control): إدارة التواصل بين الحاويات.
Helm:
Helm هو أداة إدارة حزم (Package Manager) لـ Kubernetes، وتسمح للمطورين بإنشاء وتوزيع تطبيقاتهم بشكل أكثر تنظيماً. من خلال Helm، يمكن للمستخدمين استخدام “Charts” وهي حزم مكونة من قوالب Kubernetes. هذه القوالب تسمح بتحديد كيف ينبغي نشر التطبيقات على Kubernetes بشكل موحد وقابل للتكرار. باستخدام Helm، يمكن إدارة التطبيق بشكل أسرع وأبسط، من خلال تقليل الحاجة لكتابة ملفات YAML طويلة ومعقدة.
متطلبات نشر تطبيق Node.js مع MongoDB على Kubernetes باستخدام Helm
قبل البدء في إعداد التطبيق، يجب التأكد من أن البيئة جاهزة للعمل. تشمل هذه المتطلبات:
-
Kubernetes Cluster: تحتاج إلى بيئة Kubernetes جاهزة للعمل. يمكنك إعدادها محليًا باستخدام Minikube أو استخدام خدمة سحابية مثل Google Kubernetes Engine (GKE) أو Amazon Elastic Kubernetes Service (EKS).
-
Helm: يجب تثبيت Helm على جهازك لتتمكن من إدارة الحزم على Kubernetes.
-
Node.js Application: يتطلب الأمر تطبيق Node.js يعمل بشكل محلي مع MongoDB كقاعدة بيانات.
-
MongoDB: سيكون عليك إعداد MongoDB باستخدام Helm Chart الخاص بها.
خطوات نشر تطبيق Node.js مع MongoDB على Kubernetes باستخدام Helm
1. إعداد Kubernetes و Helm
إعداد Kubernetes
أولاً، يجب إعداد Kubernetes على جهازك أو استخدام مزود خدمة سحابية مثل Google Cloud أو Amazon AWS. سنشرح باختصار كيفية إعداد Minikube لإعداد Kubernetes محليًا.
bash# تثبيت Minikube
brew install minikube
# بدء تشغيل Minikube
minikube start
# تحقق من حالة Minikube
kubectl get nodes
إعداد Helm
لتثبيت Helm، يجب أن تكون لديك بيئة Kubernetes قيد التشغيل. ثم يمكنك تنزيل وتثبيت Helm كالتالي:
bash# تنزيل وتثبيت Helm
brew install helm
# التحقق من تثبيت Helm
helm version
2. إنشاء تطبيق Node.js
قبل أن نبدأ في العمل على Kubernetes، يجب أن يكون لدينا تطبيق Node.js يعمل على قاعدة بيانات MongoDB.
إعداد تطبيق Node.js
في مجلد جديد، قم بإنشاء ملف server.js الذي سيعمل كمخدم ويب باستخدام Express.js.
bashmkdir my-node-app
cd my-node-app
npm init -y
npm install express mongoose
ثم قم بإنشاء server.js بالرمز التالي:
javascriptconst express = require('express');
const mongoose = require('mongoose');
const app = express();
// الاتصال بقاعدة بيانات MongoDB
mongoose.connect('mongodb://mongo:27017/myapp', { useNewUrlParser: true, useUnifiedTopology: true });
// إعدادات التطبيق
app.get('/', (req, res) => {
res.send('Hello World from Node.js and MongoDB on Kubernetes!');
});
// بدء الخادم
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
3. إنشاء Dockerfile لتطبيق Node.js
سنحتاج إلى إنشاء Dockerfile لتطبيق Node.js بحيث يمكننا نشره على Kubernetes باستخدام صورة Docker.
dockerfile# استخدم صورة Node.js الرسمية FROM node:14 # إعداد الدليل في الحاوية WORKDIR /usr/src/app # نسخ الملفات المطلوبة COPY package*.json ./ # تثبيت الحزم المطلوبة RUN npm install # نسخ جميع الملفات COPY . . # تحديد المنفذ الذي سيعمل عليه التطبيق EXPOSE 3000 # تشغيل التطبيق CMD ["node", "server.js"]
ثم قم ببناء الصورة باستخدام الأمر التالي:
bashdocker build -t my-node-app .
4. نشر MongoDB باستخدام Helm
أحد أهم مزايا Helm هو أنها توفر Charts جاهزة للتنفيذ. للبدء، سنستخدم Helm Chart الرسمي لنشر MongoDB على Kubernetes.
bash# إضافة مستودع Charts الرسمي
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# نشر MongoDB باستخدام Helm
helm install mongo bitnami/mongodb
يمكنك التحقق من نشر MongoDB:
bashkubectl get pods
5. نشر تطبيق Node.js على Kubernetes
الآن بعد أن أصبح لدينا MongoDB يعمل على Kubernetes، يمكننا نشر تطبيق Node.js باستخدام Helm.
إنشاء ملف Helm Chart لتطبيق Node.js
داخل مجلد تطبيقك، أنشئ مجلدًا جديدًا باسم charts ومن ثم أنشئ ملف Chart.yaml وملف values.yaml لتكوين نشر التطبيق.
yaml# charts/my-node-app/Chart.yaml
apiVersion: v2
name: my-node-app
description: A simple Node.js application
version: 1.0.0
yaml# charts/my-node-app/values.yaml
replicaCount: 1
image:
repository: my-node-app
tag: latest
pullPolicy: Always
service:
type: ClusterIP
port: 3000
ثم قم بإنشاء ملف deployment.yaml داخل مجلد templates داخل Chart.
yaml# charts/my-node-app/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-node-app
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: my-node-app
template:
metadata:
labels:
app: my-node-app
spec:
containers:
- name: my-node-app
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: 3000
env:
- name: MONGO_URI
value: "mongodb://mongo:27017/myapp"
تثبيت تطبيق Node.js باستخدام Helm
بمجرد أن يكون لديك Helm Chart، يمكنك تثبيت التطبيق باستخدام Helm:
bashhelm install my-node-app ./charts/my-node-app
6. التحقق من التطبيق على Kubernetes
يمكنك الآن التحقق من تطبيقك على Kubernetes من خلال الوصول إلى خدمة التطبيق عبر Kubernetes:
bashkubectl get svc
ثم اعثر على عنوان IP الخاص بالخدمة واختبره في متصفحك للوصول إلى تطبيق Node.js.
الختام
من خلال استخدام Kubernetes و Helm، يمكن جدولة وتوزيع تطبيق Node.js مع MongoDB بسهولة ومرونة. من خلال استخدام Helm Charts، يتم تبسيط عملية النشر والتحديث والصيانة. هذه الطريقة تتيح للمطورين إمكانية إدارة تطبيقاتهم بشكل أكثر فعالية، مما يسهم في تحسين الأداء والكفاءة في بيئات الإنتاج.

